package model

import (
	"time"

	"gorm.io/gorm"
)

// CargoCategory 货物分类
type CargoCategory struct {
	ID        uint           `gorm:"primarykey" json:"id"`
	CreatedAt time.Time      `json:"createdAt" gorm:"column:created_at"`
	UpdatedAt time.Time      `json:"updatedAt" gorm:"column:updated_at"`
	DeletedAt gorm.DeletedAt `gorm:"index" json:"-"`
	Name      string         `gorm:"type:varchar(50);uniqueIndex;not null" json:"name"` // 分类名称
	Code      string         `gorm:"type:varchar(50);uniqueIndex;not null" json:"code"` // 分类编码
	ParentID  *uint          `gorm:"column:parent_id;default:null" json:"parentId"`     // 父分类ID
	Level     int            `gorm:"type:tinyint;not null;default:1" json:"level"`      // 层级：1-一级分类，2-二级分类
	Sort      int            `gorm:"type:int;not null;default:0" json:"sort"`           // 排序
	Status    int            `gorm:"type:tinyint;not null;default:1" json:"status"`     // 状态：1-启用，0-禁用
	Remark    string         `gorm:"type:varchar(500)" json:"remark"`                   // 备注
	CreatedBy uint           `gorm:"column:created_by;not null" json:"createdBy"`       // 创建人ID
	UpdatedBy uint           `gorm:"column:updated_by;not null" json:"updatedBy"`       // 更新人ID
}

// TableName 设置CargoCategory表名
func (CargoCategory) TableName() string {
	return "cargo_categories"
}

// Cargo 货物
// @Description 货物信息
// @Success 200 {object} common.Response{data=Cargo} "成功"
// @Failure 400 {object} common.Response "请求错误"
// @Failure 500 {object} common.Response "内部错误"
// @Router /cargos [get]
type Cargo struct {
	ID           uint           `gorm:"primarykey" json:"id"`
	CreatedAt    time.Time      `json:"created_at"`
	UpdatedAt    time.Time      `json:"updated_at"`
	DeletedAt    gorm.DeletedAt `gorm:"index" json:"-"`
	Code         string         `gorm:"type:varchar(50);uniqueIndex;not null" json:"code"`   // 货物编码
	Name         string         `gorm:"type:varchar(100);not null" json:"name"`              // 货物名称
	CategoryID   uint           `gorm:"not null" json:"category_id"`                         // 分类ID
	Category     CargoCategory  `gorm:"foreignKey:CategoryID" json:"category"`               // 分类信息
	SupplierID   *uint          `gorm:"" json:"supplier_id"`                                 // 供应商ID
	Supplier     *Supplier      `gorm:"foreignKey:SupplierID" json:"supplier"`               // 供应商信息
	Unit         string         `gorm:"type:varchar(20)" json:"unit"`                        // 单位
	Spec         string         `gorm:"type:varchar(100)" json:"spec"`                       // 规格
	Price        float64        `gorm:"type:decimal(10,2)" json:"price"`                     // 价格
	Description  string         `gorm:"type:varchar(500)" json:"description"`                // 描述
	MinStock     float64        `gorm:"type:decimal(10,2)" json:"min_stock"`                 // 最小库存
	MaxStock     float64        `gorm:"type:decimal(10,2)" json:"max_stock"`                 // 最大库存
	Status       int            `gorm:"type:tinyint;not null;default:1" json:"status"`       // 状态：1-启用 2-禁用
	StorageType  int            `gorm:"type:tinyint;not null;default:1" json:"storage_type"` // 存储类型：1-普通 2-冷藏 3-冷冻
	ShelfLife    int            `gorm:"type:int;default:0" json:"shelf_life"`                // 保质期(天)
	Manufacturer string         `gorm:"type:varchar(100)" json:"manufacturer"`               // 生产厂家
	Remark       string         `gorm:"type:varchar(500)" json:"remark"`                     // 备注
	CreatedBy    uint           `gorm:"not null" json:"created_by"`                          // 创建人ID
	UpdatedBy    uint           `gorm:"not null" json:"updated_by"`                          // 更新人ID

	// 非数据库字段
	StockQuantity float64 `gorm:"-" json:"stock_quantity"` // 库存数量 (非数据库字段，用于 GetWarehouseProducts)
}

// TableName 设置Cargo表名
func (Cargo) TableName() string {
	return "cargos"
}
